/**
 * DICOM URL处理工具
 * 用于处理内网文件服务器的URL转换和代理配置
 */
import {
	DICOM_SERVER_CONFIG,
	isInternalServerUrl,
	getProxyUrl,
	convertInternalUrlToGateway
} from "../config/dicomServer";

/**
 * 将完整的内网URL转换为使用代理路径的格式
 * @param {string} url - 原始URL
 * @returns {string} 转换后的URL
 */
export function convertToProxyUrl(url) {
	if (!url) return url;

	// 如果URL已经是相对路径或以dicomweb:开头，直接返回
	if (url.startsWith("dicomweb:") || url.startsWith("/") || !url.startsWith("http")) {
		return url;
	}

	// 首先将前置机返回的内网IP转换为网闸IP
	const gatewayUrl = convertInternalUrlToGateway(url);

	// 将完整URL转换为使用代理路径的格式
	if (isInternalServerUrl(gatewayUrl)) {
		const path = gatewayUrl.substring(DICOM_SERVER_CONFIG.baseUrl.length + 1);
		return getProxyUrl(path);
	}

	// 其他情况直接返回原URL
	return url;
}

/**
 * 处理DICOM文件URL，确保使用正确的格式
 * @param {string} url - 原始URL
 * @returns {string} 处理后的DICOM URL
 */
export function processDicomUrl(url) {
	const proxyUrl = convertToProxyUrl(url);

	// 确保URL以dicomweb:开头
	if (!proxyUrl.startsWith("dicomweb:")) {
		return "dicomweb:" + proxyUrl;
	}

	return proxyUrl;
}

/**
 * 批量处理DICOM文件URL列表
 * @param {Array} urls - URL列表
 * @returns {Array} 处理后的URL列表
 */
export function processDicomUrls(urls) {
	if (!Array.isArray(urls)) return [];

	return urls.map(url => processDicomUrl(url));
}

/**
 * 检查URL是否需要代理转换
 * @param {string} url - 要检查的URL
 * @returns {boolean} 是否需要转换
 */
export function needsProxyConversion(url) {
	return isInternalServerUrl(url);
}

export default {
	convertToProxyUrl,
	processDicomUrl,
	processDicomUrls,
	needsProxyConversion
};
